/**
 * @author Created by qiush on 2017-05-27.
 */

interface IObject {
  [key: string]: any;
}

export default {
  /**
   * 更新对象中指定key 的值
   * @param obj 要更新的对象
   * @param key 指定的key
   * @param value 新的值
   * @returns {T}
   */
  set<T extends IObject>(obj: T, key: string, value: any): T {
    // 重新创建一个对象
    const newObj: T = Object.assign({}, obj);
    // 更新指定的key 的值
    newObj[key] = value;
    return newObj;
  },

  /**
   * 删除对象中指定的key
   * @param obj 要删除key 的对象
   * @param key 要删除的key
   * @returns {T}
   */
  remove<T extends IObject>(obj: T, key: string): T {
    // 重新创建一个对象
    const newObj: T = Object.assign({}, obj);
    // 删除指定的key
    delete newObj[key];
    return newObj;
  },

  extend<T extends IObject>(obj: T, newObj: object): T {
    return Object.assign({}, obj, newObj);
  }
};
